/**
 * 压缩字符串(一)
 *
 * 描述
 * 利用字符重复出现的次数，编写一种方法，实现基本的字符串压缩功能。比如，字符串aabcccccaaa会变为a2bc5a3。
 * 1.如果只有一个字符，1不用写
 * 2.字符串中只包含大小写英文字母（a至z）。
 *
 * 数据范围:
 * 0<=字符串长度<=50000
 *
 * 要求：时间复杂度O(N）
 */

/**
 * 双指针, 正常向后面遍历就可以
 * 时间复杂度 : O(n)
 * 空间复杂度 : O(n)
 */

public class Main {
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param param string字符串
     * @return string字符串
     */
    public String compressString (String param) {
        char[] nums = param.toCharArray();
        int n = nums.length;

        // 记录结果
        StringBuffer res = new StringBuffer();

        // 这里末尾不需要将 right++
        // 因为我们在判断是否相同的字符的时候, 已经将 right + 到后面一位了
        for (int right = 0; right < n; ) {

            // 记录当前压缩的字符 和 起点
            char tmp = nums[right];
            int left = right;

            while (right < n && nums[right] == tmp) {
                right++;
            }

            // 压缩字符
            res.append(tmp);

            // 这里一个字符不需要压缩了
            if (right - left != 1) {
                res.append(right - left);
            }
        }

        // 打印结果
        return res.toString();
    }

    public static void main(String[] args) {
        Main test = new Main();
        test.compressString("aabcccccaaa");
    }
}